package main

import "fmt"

/** 函数 **/
func main() {
	MyFunc01()
	MyFunc02(666)
	MyFunc03(111, 222)
	MyFunc04(1, 2, 3)
	MyFunc05(9, 666, 777, 888)
	MyFunc06(1, 2, 3, 4, 5, 6, 7, 8, 9)
}

//无参无返回值
func MyFunc01() {
	a := 123
	fmt.Println("a=", a)
}

//有参函数
func MyFunc02(b int) {
	fmt.Println("b=", b)
}

//有参函数同类型可省略
func MyFunc03(a, b int) {
	fmt.Printf("a=%v,b=%v\n", a, b)
}

//不定参数列表,使用的时候当数组用
func MyFunc04(args ...int) {
	for i, data := range args {
		fmt.Printf("04 i=%v,data=%v\n", i, data)
	}
}

//不定参数列表 必须要在参数列表最后
func MyFunc05(a int, args ...int) {
	fmt.Printf("a=%v\n", a)
	for i, data := range args {
		fmt.Printf("05 i=%v,data=%v\n", i, data)
	}
}

//不定参数 参数传递
func MyFunc06(args ...int) {
	test("all", args...)             //普通传递
	test("args[:2]...", args[:2]...) //切片传递 [0,2)
	test("args[2:]...", args[2:]...) // [2,end]
}

func test(flag string, tmps ...int) {
	fmt.Println("=============", flag, "==============")
	for i, data := range tmps {
		fmt.Printf("test i=%v,data=%v\n", i, data)
	}
}
